/*******************************************************************************
 * Copyright (c) 2011-11-10 @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a>.
 * All rights reserved.
 *
 * Contributors:
 *     <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> - initial API and implementation
 ******************************************************************************/
package com.redhat.auth.ejb;

import java.util.List;

import com.dayatang.querychannel.support.Page;
import com.redhat.auth.ejb.vo.FunctionEntityVO;

/**
 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
 * @since 2011-11-10
 */
public interface FunctionEntityApplication {
	/**
	 * 查询某节点全部子节点
	 * @param parentId 上级节点的ID
	 * @param currentPage 当前页
	 * @param pageSize 分页大小
	 * @return
	 */
	List<FunctionEntityVO> queryChildNode(Long parentId, int currentPage,
			int pageSize);

	/**
	 * 通过ID获得功能实体信息
	 * @param id
	 * @return
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-15
	 */
	FunctionEntityVO getFunctionEntityById(Long id);

	/**
	 * 创建一个功能实体
	 * @param entity
	 * @return
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-15
	 */
	FunctionEntityVO createFunctionEntity(FunctionEntityVO entity);

	/**
	 * 更新一个功能实体
	 * @param entity {name,status,alias,description}
	 * @return
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-15
	 */
	FunctionEntityVO updateFunctionEntity(FunctionEntityVO entity);

	/**
	 * 删除一个功能实体
	 * @param id
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-15
	 */
	void deleteFunctionEntityById(Long id);

	/**
	 * 获得功能实体的记录数
	 * @param search {name,status}
	 * @return
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-15
	 */
	Long getCount(FunctionEntityVO search);

	/**
	 * 查询功能实体信息
	 * @param search {name, status}
	 * @param currentPage 当前页
	 * @param pageSize 分页大小
	 * @return
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-15
	 */
	List<FunctionEntityVO> queryAllByPage(FunctionEntityVO search,
			int currentPage, int pageSize);

	/**
	 * 增加/解除功能实体关联关系
	 * @param id
	 * @param ids
	 */
	void setRelevance(long rscId, long destId);

	/**
	 * 更新功能实体状态
	 * @param FunctionEntity
	 * @param status
	 */
	void changStatus(Long id, int functionEntityStatus);

	/**
	 * 获取默认父实体,不存在则创建
	 * @return
	 */
	FunctionEntityVO getDefaultRootFunctionEntity();

	/**
	 * 分页查询功能实体
	 * @param vo {name,alias}
	 * @param currentPage
	 * @param pageSize
	 * @return
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-16
	 */
	Page<FunctionEntityVO> pageQueryFunctionEntity(FunctionEntityVO vo,
			int currentPage, int pageSize);

	/**
	 * 查询功能实体
	 * @param vo {name, alias}
	 * @return
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-16
	 */
	List<FunctionEntityVO> queryFunctionEntity(FunctionEntityVO vo);
}
